<?php

/* TODO: Add code here */
/**
 * Lớp đối tượng của FAQ phụ trách tương tác với cơ sở dữ liệu và những phương thức khác liên quan.
 * 
 **/
class user_faq
{
	#region user_common
	const TBL_T_FAQ				= 't_faq';
	const ACT_ADD							= 10;
	const ACT_UPDATE						= 11;
	const ACT_DELETE						= 12;
	const ACT_CHANGE_PAGE					= 13;
	const ACT_SHOW_EDIT = 14;
	const NUM_PER_PAGE = 1;
	
	const SQL_INSERT_FAQ			= 'INSERT INTO `{0}`
		(`faq_id`,`question`,`answer`, `content_id`,`type`) 
		VALUES(\'{1}\',\'{2}\',\'{3}\',\'{4}\',\'{5}\');';
	
	const SQL_CREATE_TABLE_T_FAQ		= 'CREATE TABLE `t_faq` (
														  `faq_id` bigint(20) NOT NULL  COMMENT \'Mã câu hỏi cho tăng tự động\',
														  `question` text COLLATE utf8_unicode_ci COMMENT \'Nội dung câu hỏi\',
														  `answer` text COLLATE utf8_unicode_ci COMMENT \'Nội dung câu đáp\',
														  `type` tinyint(4) DEFAULT NULL COMMENT \'Loại câu FAQ: 1- sản phẩm, 2: nhóm hàng\',
														  `content_id` int(11) DEFAULT NULL COMMENT \'ID của sản phẩm hoặc của nhóm hàng\',
														  `create_user` char(12) COLLATE utf8_unicode_ci DEFAULT NULL COMMENT \'Mã user tạo câu hỏi\',
														  `create_date` datetime DEFAULT NULL COMMENT \'Ngày user tạo câu hỏi\',
														  `update_user` char(12) COLLATE utf8_unicode_ci DEFAULT NULL COMMENT \'Mã user chỉnh sửa câu hỏi gần nhất\',
														  `update_date` datetime DEFAULT NULL COMMENT \'Ngày user chỉnh sửa câu hỏi gần nhất\',
														  `delete_user` char(12) COLLATE utf8_unicode_ci DEFAULT NULL COMMENT \'Mã user xóa câu hỏi\',
														  `delete_date` datetime DEFAULT NULL COMMENT \'Ngày user xóa câu hỏi\',
														  `delete_flag` tinyint(4) DEFAULT NULL COMMENT \'0: avaiable,1 : delete\',
														  PRIMARY KEY (`faq_id`)
														) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;';
	#end region
	
	
	#region Variables
	var $_objConnection;
	#end region
	
	
	#region Contructors
	/**
	*  Phương thức khởi tạo đối tượng faq đồng thời tạo connection đến db
	*
	* @param object $objConnection Đối tượng kết nối đến db
			
	* @return void 
	*
	*/
	public function user_faq($objConnection)
	{
		$this->_objConnection = $objConnection;
		
	}
	#end region
	
	
	#region Private Functions
	
	#end region
	
	
	#region Public Functions
	
	
	/**
	 * Thêm một loạt câu hỏi và câu trả lời. Trong trường hợp thêm mới sản phẩm hoặc thêm mới nhóm
	 *
	 * @param int $m_object_id Mã sản phảm hoặc mã nhóm
	 * @param int $m_type Loại: 1->sản phẩm,2->Nhóm
	 * @param array $m_arrQuestion Có thể là string hoặc mảng chứa các câu hỏi
	 * @param array $m_arrAnswer Có thể là string hoặc mảng chứa các câu đáp
	 * @return int Số lượng câu được thêm mới
	 *
	 */
	public function insertFaqBatch($m_object_id,$m_type,$m_arrQuestion,$m_arrAnswer)
	{
		$strSQL = 'INSERT INTO `'.self::TBL_T_FAQ.'`
				(`faq_id`,`question`,`answer`, `content_id`,`type`)VALUES' ;
		if (!is_array($m_arrQuestion) ) 
		{
			$m_arrQuestion = explode(user_common::STRING_SEPARATE,$m_arrQuestion);
			$m_arrAnswer = explode(user_common::STRING_SEPARATE,$m_arrAnswer);
		}
		//print_r($m_arrName);
		$iCount = count($m_arrQuestion);
		$strSQLValue = '';
		for($i = 0 ;$i<$iCount;$i++)
		{
			//moi dong phai tang id+1
			$intID = user_common::getMaxID(self::TBL_T_FAQ);
			//tránh phần cuối rống do dư separate
			if (trim($m_arrQuestion[$i])) {
				$strSQLValue .='('.$intID.',\''.user_common::escape_mysql_string($m_arrQuestion[$i]).'\',\''.user_common::escape_mysql_string($m_arrAnswer[$i]).'\','.$m_object_id.','.$m_type.'),' ;				
			}
		}
		$strTableName = self::TBL_T_FAQ;
		$strSQL .= user_common::cutLast($strSQLValue,1);
		if (!user_common::ExecutequeryWithCheckExistedTable($strSQL,self::SQL_CREATE_TABLE_T_FAQ,$this->_objConnection,$strTableName))
		{
			//echo $strSQL.'end';
			user_common::writeLog('Error add faq:'.$strSQL,1);
			return false;
		}	
		return true;
	}
	
	
	/**
	 * Hàm lấy tất cả record của c_doc_xxxx dựa vào danh sách doc_id truyền vào dùng cho việc search.
	 *	
	 * @param array $listID mang chua doc_id va weight.
	 * @param string $prefixTable Tiền tố của table doc user_doc::TBL_T_DOC hay  user_doc::TBL_C_DOC
	 * @param string $selectField Cho biết các field cần lấy.
	 * @return array Danh sách record 
	 * @author ThanhViet added [20101005]
	 */
	public function getFaqByIDs($listID,$selectField='*') 
	{
		/*$arrDocID = Array();
		foreach($listID as $item)
		{
			$arrDocID[$item['id']] = $item['id'];
		}*/
		//echo '<br>count:'.count($listID);
		$strID='';
		foreach ($listID as $key)
		{
			$strID.='\''.$key['id'].'\',';
		}
		$strID = user_common::cutLast($strID,1);
		$strSQL .= user_common::prepareQuery(user_common::SQL_SELECT_FREE, 
		array($selectField, self::TBL_T_FAQ ,							
			'WHERE faq_id IN ('.$strID.')'));
				
		//echo '<br>SQL:'.$strSQL;
		$arrResult =$this->_objConnection->selectCommand($strSQL);
		
		
		
		//print_r($arrResult);
		//echo '<br>';
		if(!$arrResult)
		{
			user_common::writeLog('getFaqByIDs:'.$strSQL,1,$_mainFrame->pPage);
			return null;
		}	
		
		//print_r($listID);
		//chuyển kết quả vào danh sách ID đã theo thứ tự
		foreach ($arrResult as $item)
		{
			$listID[$item['faq_id']] = $item;
		}
		//print_r($listID);
		return $listID;
	}
	
	
	/**
	 * Hàm lấy tất cả record của table t_faq dựa vào danh sách doc_id truyền vào dùng cho việc search.
	 *	
	 * @param array $object_id mang chua doc_id va weight.
	 * @param int $type 1->san pham, ; 2->nhom san pham
	 * @param string $selectField Cho biết các field cần lấy.
	 * @return array Danh sách record 
	 * @author ThanhViet added [20111005]
	 */
	public function getFaqByProduct($object_id,$type,$intPage=1,$selectField='*') 
	{
		if(!$intPage || $intPage<1)
		{
			$intPage =1;
		}
		$strSQL .= user_common::prepareQuery(user_common::SQL_SELECT_FREE, 
				array($selectField, self::TBL_T_FAQ ,							
					'WHERE content_id = '.$object_id.' and type='.$type.' limit '.(($intPage-1)* self::NUM_PER_PAGE).','.self::NUM_PER_PAGE));
		//echo '<br>SQL:'.$strSQL;
		$arrResult =$this->_objConnection->selectCommand($strSQL);
		//print_r($arrResult);
		//echo '<br>';
		if(!$arrResult)
		{
			user_common::writeLog('getFaqByProduct:'.$strSQL,1);
			return null;
		}	
		//print_r($listID);
		return $arrResult;
	}
	
	/**
	 * This is method outputHTMLSearch
	 *
	 * @param mixed $arrFaq This is a description
	 * @param mixed $strKeyword This is a description
	 * @return mixed This is the return value description
	 *
	 */
	public function outputHTMLSearch($arrFaq,$strKeyword)
	{
		$strHTML = '<div id="content"><table class="tbl-list" style="width:100%">
				<thead>
				<td class="lastCell" colspan="2">Câu hỏi thường gặp</td>
				</thead></table>';
		
		foreach($arrFaq as $item)
		{
			$strHTML .= $this->outputOneHTMLSearch($item,$strKeyword);
		}
		$strHTML .='<div class=\'paging\'>'.user_common::getPagingHTMLByNoNUm(1, '').'</div>';
		$strHTML .= '</div>';
		return $strHTML;
	}
	
	
	public function outputOneHTMLSearch($objFAQ,$strKeyword) {
		if($objFAQ['type']=='1' || $objFAQ['type']=='1')
		{
			$productID= $objFAQ['content_id'];
			$catID= '';
		}
		else{
			$productID= '';
			
			$catID= $objFAQ['content_id'];
		}
		$strHTML = '<div class="result">
				<div class="result-question"><a href="product_detail.php?product='.$productID.'&cat='.$catID.'">'.user_sphinx_search::highlight_match($objFAQ['question'],$strKeyword).'</a></div>
				<div class="result-answer">'.user_sphinx_search::highlight_match( urldecode(strip_tags($objFAQ['answer'])),$strKeyword).'</div>
				</div>';
		return $strHTML;
	}
	
	
	/**
	 * Hàm lấy output HTML cho product detail
	 *	
	 * @param array $object_id mang chua doc_id va weight.
	 * @param int $type 1->san pham, ; 2->nhom san pham
	 * @return array Danh sách record 
	 * @author ThanhViet added [20111005]
	 */
	public function outputFaqForProductDetail($object_id,$type,$intPage)
	{
		
		$arrProperty = $this->getFaqByProduct($object_id,$type,$intPage);
		if(count($arrProperty)>0)
		{
			$strHTMl = '<div  style="float:'.($type==1?'left;clear:left':'right;clear:right').';width:99%;">';
					
			$strHTMl .='<table class="tbl-list" style="width:100%">
					<thead>
					<td class="lastCell" colspan="2">'.($type==1?'Câu hỏi riêng':'Câu hỏi chung').'</td>
					</thead>';
			
			$i=0;	
			foreach($arrProperty as $item)
			{
				//neu la dong dau tien thi row do cos nen
				if($i%2==0)
				{
					$style = 'even';			
				}
				else
				{
					$style = 'odd';	
				}
				$i++;
				$strHTMl .= '<tr class="'.$style.'">
						<td style="width:30%">'.$item['question'].'</td>
						<td class="lastCell">'.$item['answer'].'</td>
						</tr>';
			}
			
			$strHTMl .='</table>';
			$strHTMl .= "<div>".user_common::getPagingHTMLByNumWithType(1,self::NUM_PER_PAGE,user_common::getTotalRecord(self::TBL_T_FAQ,$this->_objConnection,' where content_id=\''.$object_id.'\' and type='.$type),
					"_objFaq.changePage",$type)."</div>";
			
		$strHTML .='</div>';
		}
		return $strHTMl;
		
	}
	
	
	/**
	 * This is method deleteFAQByProduct
	 *
	 * @param mixed $intID This is a description
	 * @param mixed $itype This is a description
	 * @return mixed This is the return value description
	 *
	 */
	public function deleteFAQByProduct($object_id,$itype)
	{
		$strSQL = user_common::prepareQuery(user_common::SQL_DELETE, 
				array(self::TBL_T_FAQ ,							
					'WHERE content_id = '.$object_id.' and type='.$itype));
		$result = $this->_objConnection->executeSQL($strSQL);
		if ($result<1)
		{
			user_common::writeLog('deleteFAQByProduct:'.$strSQL,1);
			return false;
		}
		
		return true;
	}
	#end region
}

?>